package cn.melonlib.cores.model.anno;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@Documented
@Target(TYPE)
@Retention(RUNTIME)
public @interface WorkerService {

    /**
     * 注册对象的名称，如果为空字符串，则会取Service注解的名称，如果Service注解同样为空则为类名
     * @return
     */
    String name() default "";

    /**
     * 写入schema的目录，以此来区分该功能属于哪个模块
     * @return
     */
    String module();

    /**
     * 需要 映射的数据装载对象，通常为数据库持久ORM映射对象，如果存在多表级联关系或者复杂查询，则需要建立VO或者BEAN对象进行映射。
     * @return
     */
    WorkerModel model();

    /**
     * 需要忽略方法，此属性一般应对继承的情况，如果继承的父bean中存在注册的方法，但是本bean中需要删除，用此属性忽略。
     * @return
     */
    String [] ignores() default {};

    /**
     * 是否创建schema文件，用于创建schema文件工具，通常来说schema一般不用修改，创建即可使用，此时schema可以无限覆盖，不影响功能。
     * 但是某些特殊情况下需要单独配置schema文件来单独解析，一次创建以后经过大量调整，不能覆盖，为此需要此属性跳过修改schema文件。
     * @return
     */
    boolean createSchema() default true;

    /**
     * 权限，默认为空权限，如果为空权限则不受控制
     * @return
     */
    WorkerPermission permission() default @WorkerPermission({});
}
